www.gusucode.com > DB-Libray 操作SQLServer编程的VC++ 一例-源码程序 > DB-Libray 操作SQLServer编程的VC++ 一例-源码程序\code\PhManage\SaleView.cpp
//Download by http://www.NewXing.com // SaleView.cpp : implementation file // #include "stdafx.h" #include "PhysicM.h" #include "SaleView.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CSaleView IMPLEMENT_DYNCREATE(CSaleView, CFormView) CSaleView::CSaleView() : CFormView(CSaleView::IDD) { //{{AFX_DATA_INIT(CSaleView) m_price = 0.0; m_rate = 0.0; m_number = 0.0; m_edt = _T(""); m_dt_rate = 0.0; //}}AFX_DATA_INIT //ImageList=NULL; init=false; } CSaleView::~CSaleView() { // if (ImageList) delete ImageList; } void CSaleView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSaleView) DDX_Control(pDX, IDC_SALESMAN_COMB, m_SaleManComb); DDX_Control(pDX, IDC_HOSPITAL_COMB, m_HospitalComb); DDX_Control(pDX, IDC_PhysicName_COMB, m_PhysicComb); DDX_Control(pDX, IDC_PROVIDER_COMB, m_ProviderComb); DDX_Text(pDX, IDC_PRICE_EDIT, m_price); DDX_Text(pDX, IDC_RATE_EDIT, m_rate); DDX_Control(pDX, IDC_MSFLEXGRID1, m_Grid); DDX_Text(pDX, IDC_EDT, m_edt); DDX_Text(pDX, IDC_DEDIT, m_dt_rate); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSaleView, CFormView) //{{AFX_MSG_MAP(CSaleView) ON_CBN_SELCHANGE(IDC_PhysicName_COMB, OnSelchange) ON_CBN_SELCHANGE(IDC_PROVIDER_COMB, OnSelchangeProviderComb) ON_BN_CLICKED(IDC_ADD_BTN, OnAddBtn) ON_CBN_SELCHANGE(IDC_HOSPITAL_COMB, OnSelchangeHospitalComb) ON_EN_CHANGE(IDC_EDT, OnChangeEdt) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSaleView diagnostics #ifdef _DEBUG void CSaleView::AssertValid() const { CFormView::AssertValid(); } void CSaleView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // CSaleView message handlers void CSaleView::OnInitialUpdate() { CFormView::OnInitialUpdate(); if (init) return; /* m_List.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_FULLROWSELECT); char *head[]={"序 号","药品名称","单价","数量","金额","费率(%)","费用","医生","医生费率%","医生费用","供应商名称","医院","销售员","ID","备注"}; int i; for (i=0;i<7;i++) m_List.InsertColumn(i,head[i],(i>1)?LVCFMT_RIGHT:LVCFMT_LEFT,(i==1) ? 100 : 55,i); for (i=7;i<9;i++) m_List.InsertColumn(i,head[i],(i>7)?LVCFMT_RIGHT:LVCFMT_LEFT,70,i); for (i=9;i<15;i++) m_List.InsertColumn(i,head[i],LVCFMT_LEFT,(i>9 && i<12) ? 150 :70); ImageList=new CImageList(); ImageList->Create(16,16,TRUE | ILC_COLOR32,2,0); ImageList->Add(AfxGetApp()->LoadIcon(IDI_ICONUSER)); ImageList->Add(AfxGetApp()->LoadIcon(IDR_MENUVIEW_TMPL)); m_List.SetImageList(ImageList,LVSIL_SMALL);// LVSIL_NORMAL); */ Init(); DefineGrid(); } void CSaleView::Init() { init=true; try{ DBLibrary DB(GetDB()); DB.Open("select a.physic_id phid," "b.physic_name phn " " from physic_rate a,physic b" " where a.physic_id=b.physic_id " " order by a.physic_id"); int id=0; char pn[40],tmp[50]; memset(tmp,0,50); memset(pn,0,40); while(!DB.isEof()) { id=DB.GetValue("phid"); DB.GetValue("phn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_PhysicComb.AddString(tmp); DB.Next(); } /* DB.Open("select hospital_id hid,rtrim(hospital_name) hn from hospital order by hospital_id"); memset(tmp,0,50); memset(pn,0,40); while(!DB.isEof()) { id=DB.GetValue("hid"); DB.GetValue("hn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_HospitalComb.AddString(tmp); DB.Next(); } */ DB.Open("select salesman_id sid,salesman_name sn from salesman order by salesman_id"); memset(tmp,0,50); memset(pn,0,40); while(!DB.isEof()) { id=DB.GetValue("sid"); DB.GetValue("sn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_SaleManComb.AddString(tmp); DB.Next(); } /* DB.Open("select doctor_id did,doctor_name dn from doctor order by doctor_id"); memset(tmp,0,50); memset(pn,0,40); while(!DB.isEof()) { id=DB.GetValue("did"); DB.GetValue("dn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_DoctorComb.AddString(tmp); DB.Next(); } */ }catch (DBErr &err) { char *str; int code; err.GetLastErr(code,&str); //((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code); ShowErr(str,code); } catch (...) { ShowErr("unknow error",-1); //((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); } } void CSaleView::OnSelchange() { m_Grid.SetRows(2); for(int i=0;i<m_Grid.GetCols() - 1;i++) m_Grid.SetTextMatrix(1,i,""); GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE); m_price=0;m_dt_rate=0;m_rate=0; UpdateData(FALSE); m_HospitalComb.ResetContent(); m_ProviderComb.ResetContent(); CString pn; m_PhysicComb.GetWindowText(pn); if(pn.IsEmpty()) return; CString pid=pn.Mid(1,3); DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession); try{ DB.Open("select a.provider_id prid," "b.provider_name pn " " from physic_rate a,provider b" " where a.physic_id=%s and a.provider_id=b.provider_id " " order by a.provider_id",pid); int id=0; char pn[40],tmp[50]; memset(tmp,0,50); memset(pn,0,40); while(!DB.isEof()) { id=DB.GetValue("prid"); DB.GetValue("pn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_ProviderComb.AddString(tmp); DB.Next(); } }catch (DBErr &err) { char *str; int code; err.GetLastErr(code,&str); ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code); } catch (...) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); } } void CSaleView::OnSelchangeProviderComb() { m_Grid.SetRows(2); for(int i=0;i<m_Grid.GetCols() - 1;i++) m_Grid.SetTextMatrix(1,i,""); GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE); CString pn,pr; m_PhysicComb.GetWindowText(pn); m_ProviderComb.GetWindowText(pr); if(pn.IsEmpty()) return; if(pr.IsEmpty()) return; CString pid,prid; pid=pn.Mid(1,3); prid=pr.Mid(1,3); DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession); try{ DB.Open("select a.physic_id phid," "b.physic_name phn," " b.price,a.rate,a.doctor_rate" " from physic_rate a,physic b " " where a.physic_id=%s and a.provider_id=%s " " and a.physic_id=b.physic_id " " order by a.physic_id",pid,prid); /* double price,rate,d_rate; pric=0.00; rate=0.00; d_rate=0.00; */ DB.GetValue("price",&m_price); DB.GetValue("rate",&m_rate); DB.GetValue("doctor_rate",&m_dt_rate); //m_price=price UpdateData(FALSE); GetHospital(); }catch (DBErr &err) { char *str; int code; err.GetLastErr(code,&str); ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code); } catch (...) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); } } void CSaleView::OnAddBtn() { DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession); UpdateData(); GetDlgItem(IDC_ADD_BTN)->EnableWindow(FALSE); CString pt,ht,st,prt,dt; CString pid,hid,sid,prid,did; CString num,price,sub_fee,real_fee,date,dt_rate; //double num=0.00, m_PhysicComb.GetWindowText(pt); m_HospitalComb.GetWindowText(ht); m_SaleManComb.GetWindowText(st); m_ProviderComb.GetWindowText(prt); pt.TrimLeft(); pt.TrimRight(); ht.TrimLeft(); ht.TrimRight(); st.TrimLeft(); st.TrimRight(); prt.TrimLeft(); prt.TrimRight(); try { if(m_dt_rate<=0) { int rt=MessageBox("临床费为零或小于零,是否继续?","提示信息",MB_YESNO | MB_ICONQUESTION | MB_DEFBUTTON2); if (rt != IDYES) throw "临床费为零或小于零,取消操作"; } if(pt.IsEmpty()) throw "药品名称不能为空,请选择"; if(ht.IsEmpty()) throw "医院名称不能为空,请选择"; if(st.IsEmpty()) throw "销售人员名称不能为空,请选择"; if(prt.IsEmpty()) throw "供应商名称不能为空,请选择"; }catch(char *estr) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr); GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE); GetDlgItem(IDC_DEDIT)->SetFocus(); DB.RollbackTrans(); return; } pid=pt.Mid(1,3); hid=ht.Mid(1,3); sid=st.Mid(1,3); prid=prt.Mid(1,3); //did=dt.Mid(1,3); // DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession); /* if (!CheckGrid(&m_Grid)) { GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE); return; } */ double max_id=0; char errstr[100]; try{ DB.Open("SELECT IDENT_CURRENT('SALE_NUMBER') did " " FROM INFORMATION_SCHEMA.TABLES " " WHERE TABLE_NAME ='SALE_NUMBER' "); DB.GetValue("did",&max_id); max_id += 1; int id=(int)max_id; int rt=0,ct=0,rows,count=0; rows=m_Grid.GetRows(); rows -= 1; DB.BeginTrans(); for (rt=1;rt<rows;rt++) { dt=m_Grid.GetTextMatrix(rt,1); did=dt.Mid(1,3); did.TrimLeft(); did.TrimRight(); num=m_Grid.GetTextMatrix(rt,2); dt_rate=m_Grid.GetTextMatrix(rt,3); price=m_Grid.GetTextMatrix(rt,4); sub_fee=m_Grid.GetTextMatrix(rt,5); real_fee=m_Grid.GetTextMatrix(rt,6); date=m_Grid.GetTextMatrix(rt,7); num.TrimLeft(); num.TrimRight(); if (atof(num) <= 0.00) continue; price.TrimLeft(); price.TrimRight(); if (price.IsEmpty()) price="0"; sub_fee.TrimLeft(); sub_fee.TrimRight(); if (sub_fee.IsEmpty()) sub_fee="0"; date.TrimLeft(); date.TrimRight(); if (date.IsEmpty()) { sprintf(errstr,"销售日期不能为空(第%d行),请输入",rt); throw errstr; } if(date.GetLength() != 10) { sprintf(errstr,"销售日期有误(第%d行),请检查",rt); throw errstr; } int year,month,day; year=atoi(date.Mid(0,4)); month=atoi(date.Mid(5,2)); day=atoi(date.Mid(8,2)); COleDateTime dt; if (dt.SetDate(year,month,day) != 0) { sprintf(errstr,"销售日期%s有误(第%d行),请更正",date,rt); throw errstr; } date=dt.Format("%Y-%m-%d"); if (did.IsEmpty()) { sprintf(errstr,"第%d行医生编号有误",rt); throw errstr; } DB.ExecSQL("INSERT INTO sale_number " "(Physic_ID,Hospital_ID,Salesman_ID,Provider_ID,doctor_id,Physic_Num,price,Rate,doctor_rate,sum_fee,Sub_Fee,real_fee,Sale_Date,Op_Date) " " VALUES(%s,%s,%s,%s,%s,%s,%.2f,%.2f,%s,%s,%s,%s,'%s',GetDate())",// pid,hid,sid,prid,did,num,m_price,m_rate,dt_rate,price,sub_fee,real_fee,date);// count++; } if (count == 0) throw "没有内容需要增加"; DB.CommitTrans(); ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddLog("新增销售记录%d条成功",count); GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE); GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_DEDIT)->SetFocus(); m_edt=""; UpdateData(FALSE); for(int row=1; row<m_Grid.GetRows();row++) for(int cols=2;cols<m_Grid.GetCols();cols++) { if (cols==3) continue; m_Grid.SetTextMatrix(row,cols,""); } } catch (DBErr &err) { char *str; int code; err.GetLastErr(code,&str); ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code); DB.RollbackTrans(); GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE); } catch (char *estr) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr); DB.RollbackTrans(); GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE); } catch(...) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); DB.RollbackTrans(); GetDlgItem(IDC_ADD_BTN)->EnableWindow(TRUE); } } void CSaleView::DefineGrid() { int i,rows=8; m_Grid.SetCols(rows); m_Grid.SetRows(2); m_Grid.SetFixedCols(2); m_Grid.SetFixedRows(1); m_Grid.SetRowHeight(0,400); m_Grid.SetRowHeight(1,320); for (i=1;i<m_Grid.GetRows() -1;i++) m_Grid.SetRowHeight(i,320); int row=0; char *head[]={"序号","医 生","数 量 ","临床费","应付金额(元)","折扣费用","实付金额","日期"};//,"备 注"}; for (i=0;i<rows;i++) { m_Grid.SetTextMatrix(row,i,head[i]); m_Grid.SetColAlignment(i,( i>1 && i<m_Grid.GetCols() - 1 ) ? 7 : 1); } m_Grid.SetColWidth(0,500); m_Grid.SetColWidth(1,1500); m_Grid.SetColWidth(2,1100); m_Grid.SetColWidth(3,680); m_Grid.SetColWidth(4,1300); m_Grid.SetColWidth(5,1200); m_Grid.SetColWidth(6,1200); m_Grid.SetColWidth(7,1200); } void CSaleView::SetEdtPos() { if (m_Grid.GetRow() == m_Grid.GetRows() - 1) return; if (m_Grid.GetCol() == m_Grid.GetCols()-1) { if (m_Grid.GetRow() > 1) { m_edt=m_Grid.GetTextMatrix(m_Grid.GetRow() - 1,m_Grid.GetCol()); UpdateData(FALSE); m_Grid.SetTextMatrix(m_Grid.GetRow(),m_Grid.GetCol(),m_edt); } } if (m_Grid.GetCol() == 6) { double real_fee=0.00; char tmp[20]; real_fee = atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),4)) - atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),5)); sprintf(tmp,"%.2f",real_fee); m_edt=tmp; UpdateData(FALSE); m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp); SumCol(6,m_Grid.GetRows() - 1); } long x,y,cx,cy; CRect rect; m_Grid.GetWindowRect(&rect); x= m_Grid.GetCellLeft() / 15 + 10 ; y=m_Grid.GetCellTop(); y= rect.top + m_Grid.GetCellTop()/15 - 65; cx=m_Grid.GetCellWidth() /15 + 1; cy=m_Grid.GetCellHeight() /15 + 2; GetDlgItem(IDC_EDT)->SetWindowPos(&wndTop,x,y,cx,cy,SWP_SHOWWINDOW); GetDlgItem(IDC_EDT)->SetFocus(); GetDlgItem(IDC_EDT)->SendMessage(EM_SETLIMITTEXT,10,0); GetDlgItem(IDC_EDT)->SendMessage(EM_SETSEL,0,-1); //::SendMessage((HWND)GetDlgItem(IDC_EDT),WM_SETFOCUS,(HWND)GetDlgItem(IDC_EDT),0); } BEGIN_EVENTSINK_MAP(CSaleView, CFormView) //{{AFX_EVENTSINK_MAP(CSaleView) ON_EVENT(CSaleView, IDC_MSFLEXGRID1, -600 /* Click */, OnCellClick, VTS_NONE) ON_EVENT(CSaleView, IDC_MSFLEXGRID1, 71 /* EnterCell */, OnEnterCellMsflexgrid1, VTS_NONE) ON_EVENT(CSaleView, IDC_MSFLEXGRID1, 73 /* Scroll */, OnScrollMsflexgrid1, VTS_NONE) //}}AFX_EVENTSINK_MAP END_EVENTSINK_MAP() void CSaleView::OnCellClick() { if(m_Grid.GetRow()>0 || m_Grid.GetCol()>1 ) SetEdtPos(); } void CSaleView::MoveEdt(MSG *pMsg) { switch( pMsg->wParam) { case VK_LEFT: if(m_Grid.GetCol()>2) m_Grid.SetCol(m_Grid.GetCol() - 1); else if(m_Grid.GetCol()== 2 && m_Grid.GetRow() > 1 ) { m_Grid.SetRow(m_Grid.GetRow() - 1); m_Grid.SetCol(m_Grid.GetCols() - 1); } SetEdtPos(); break; case VK_RIGHT: case VK_RETURN: if(m_Grid.GetCol()< m_Grid.GetCols() - 1) m_Grid.SetCol(m_Grid.GetCol() + 1); else if (m_Grid.GetCol() == m_Grid.GetCols() - 1 && m_Grid.GetRow() < m_Grid.GetRows() - 2) { m_Grid.SetRow(m_Grid.GetRow() + 1); m_Grid.SetCol(2); } SetEdtPos(); break; case VK_UP: if(m_Grid.GetRow() > 1) m_Grid.SetRow(m_Grid.GetRow() - 1); SetEdtPos(); break; case VK_DOWN: if(m_Grid.GetRow() < m_Grid.GetRows() - 2) m_Grid.SetRow(m_Grid.GetRow() + 1 ); SetEdtPos(); break; } } BOOL CSaleView::PreTranslateMessage(MSG* pMsg) { // TODO: Add your specialized code here and/or call the base class if(pMsg->message == WM_KEYDOWN ) MoveEdt(pMsg); return CFormView::PreTranslateMessage(pMsg); } void CSaleView::OnEnterCellMsflexgrid1() { m_edt.Empty(); m_edt=m_Grid.GetText(); UpdateData(FALSE); } void CSaleView::OnSelchangeHospitalComb() { UpdateData(); m_Grid.SetRedraw(FALSE); m_Grid.SetRows(2); int cols=m_Grid.GetCols(); DBLibrary DB(((CPhysicMApp *)AfxGetApp())->DBSession); try{ char tmp[50],pn[40]; long id; CString m_id,p_id; m_HospitalComb.GetWindowText(m_id); p_id=m_id.Mid(1,3); DB.Open("select doctor_id did,doctor_name dn from doctor where hospital_id = %s order by doctor_id",p_id); memset(tmp,0,50); int i=1; while(!DB.isEof()) { m_Grid.SetRows(m_Grid.GetRows()+1); m_Grid.SetRow(m_Grid.GetRows()-1); m_Grid.SetRowHeight(m_Grid.GetRows() - 1,310); sprintf(pn,"%03d",i); m_Grid.SetTextMatrix(i,0,pn); memset(pn,0,40); id=DB.GetValue("did"); DB.GetValue("dn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_Grid.SetTextMatrix(i,1,tmp); sprintf(tmp,"%.2f",m_dt_rate); for (int j=2;j<cols;j++) (j==3) ? m_Grid.SetTextMatrix(i,3,tmp) : m_Grid.SetTextMatrix(i,j,""); i++; DB.Next(); } if (i==1) return; m_Grid.SetCellAlignment(4); m_Grid.SetTextMatrix(i,0,"合 计"); m_Grid.SetTextMatrix(i,1,"合 计"); m_Grid.SetMergeRow(i,TRUE); m_Grid.SetRedraw(TRUE); m_Grid.SetRow(1); SetEdtPos(); }catch (DBErr &err) { char *str; int code; err.GetLastErr(code,&str); ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code); } catch (...) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); } } bool CSaleView::CheckGrid(CMSFlexGrid *pGrid) { CString dt,did; CString num,price,sub_fee,real_fee,date,dt_rate; char errstr[100]; int rt,count=0,rows=pGrid->GetRows()-1; try{ for (rt=1;rt<rows;rt++) { dt=m_Grid.GetTextMatrix(rt,1); did=dt.Mid(1,3); did.TrimLeft(); did.TrimRight(); num=m_Grid.GetTextMatrix(rt,2); dt_rate=m_Grid.GetTextMatrix(rt,3); price=m_Grid.GetTextMatrix(rt,4); sub_fee=m_Grid.GetTextMatrix(rt,5); real_fee=m_Grid.GetTextMatrix(rt,6); date=m_Grid.GetTextMatrix(rt,7); num.TrimLeft(); num.TrimRight(); if (atof(num) <= 0.00) continue; price.TrimLeft(); price.TrimRight(); if (price.IsEmpty()) price="0"; sub_fee.TrimLeft(); sub_fee.TrimRight(); if (sub_fee.IsEmpty()) sub_fee="0"; date.TrimLeft(); date.TrimRight(); if (date.IsEmpty()) { sprintf(errstr,"销售日期不能为空(第%d行),请输入",rt); throw errstr; } if(date.GetLength() != 10) { sprintf(errstr,"销售日期有误(第%d行),请检查",rt); throw errstr; } int year,month,day; year=atoi(date.Mid(0,4)); month=atoi(date.Mid(5,2)); day=atoi(date.Mid(8,2)); COleDateTime dt; if (dt.SetDate(year,month,day) != 0) { sprintf(errstr,"销售日期%s有误(第%d行),请更正",date,rt); throw errstr; } date=dt.Format("%Y-%m-%d"); if (did.IsEmpty()) { sprintf(errstr,"第%d行医生编号有误",rt); throw errstr; } count++; } if (count == 0) throw "没有内容需要增加"; return TRUE; } catch (char *estr) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr(estr); return FALSE; } catch(...) { ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); return FALSE; } } void CSaleView::SumCol(int col,int rows) { double sum=0.00; for (int i=1;i< rows;i++) sum += atof(m_Grid.GetTextMatrix(i,col)); char str[20]; sprintf(str,"%.2f",sum); m_Grid.SetTextMatrix(rows,col,(LPCTSTR) str); } void CSaleView::OnChangeEdt() { // TODO: If this is a RICHEDIT control, the control will not // send this notification unless you override the CFormView::OnInitDialog() // function and call CRichEditCtrl().SetEventMask() // with the ENM_CHANGE flag ORed into the mask. // TODO: Add your control notification handler code here UpdateData(); m_Grid.SetText(m_edt); char tmp[20]; double pay_fee=0.00; //输入数量 if(m_Grid.GetCol() == 2) { pay_fee=atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),3)) * atof(m_edt); sprintf(tmp,"%.2f",pay_fee); m_Grid.SetTextMatrix(m_Grid.GetRow(),4,(LPCTSTR)tmp); m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp); SumCol(4,m_Grid.GetRows() - 1); SumCol(m_Grid.GetCol(),m_Grid.GetRows() - 1); SumCol(6,m_Grid.GetRows() - 1); return; } //临床费 if(m_Grid.GetCol()==3) { pay_fee=atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),2)) * atof(m_edt); sprintf(tmp,"%.2f",pay_fee); m_Grid.SetTextMatrix(m_Grid.GetRow(),4,(LPCTSTR)tmp); m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp); SumCol(4,m_Grid.GetRows() - 1); SumCol(6,m_Grid.GetRows() - 1); return; } if (m_Grid.GetCol() == 4) { double real_fee=0.00; real_fee = atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),4)) - atof(m_Grid.GetTextMatrix(m_Grid.GetRow(),5)); sprintf(tmp,"%.2f",real_fee); m_Grid.SetTextMatrix(m_Grid.GetRow(),6,(LPCTSTR)tmp); SumCol(6,m_Grid.GetRows() - 1); } if (m_Grid.GetCol() == 7 ) return; SumCol(m_Grid.GetCol(),m_Grid.GetRows() - 1); } CDBSession CSaleView::GetDB() { return ((CPhysicMApp *)AfxGetApp())->DBSession; } void CSaleView::ShowErr(char *str,int code) { if(((CPhysicMApp *)AfxGetApp())->pMainFrm==NULL) { MessageBox(str,"错误提示",MB_OK | MB_ICONERROR); return; } ((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(errcode:%d)",str,code); } void CSaleView::GetHospital() { m_HospitalComb.ResetContent(); try{ DBLibrary DB(GetDB()); int id=0; char pn[40],tmp[50]; memset(tmp,0,50); memset(pn,0,40); DB.Open("select hospital_id hid,hospital_name hn from hospital order by hospital_id"); memset(tmp,0,50); memset(pn,0,40); while(!DB.isEof()) { id=DB.GetValue("hid"); DB.GetValue("hn",pn); sprintf(tmp,"[%03d]%s",id,pn); m_HospitalComb.AddString(tmp); DB.Next(); } }catch (DBErr &err) { char *str; int code; err.GetLastErr(code,&str); //((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("%s(%d)",str,code); ShowErr(str,code); } catch (...) { ShowErr("unknow error",-1); //((CPhysicMApp *)AfxGetApp())->pMainFrm->AddErr("unknow err(%d)",-1); } } void CSaleView::OnScrollMsflexgrid1() { GetDlgItem(IDC_EDT)->ShowWindow(SW_HIDE); GetDlgItem(IDC_DEDIT)->SetFocus(); }